home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The PC-SIG Library 10
/
The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso
/
PC_SIGCD
/
05
/
6
/
DISK0564.ZIP
/
SOURCE.ARC
/
ASM.ARC
/
GETARGS.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-03-25
|
2KB
|
62 lines
TITLE COMMAND LINE ARGUMENT PARSER
.XLIST
INCLUDE MACROS.DEF
INCLUDE ASCII.DEF
.LIST
DOSSEG
.MODEL SMALL
.CODE
EXTRN SKIPSP:NEAR
PUBLIC GETARGS
;
; COLLECT ARGUMENTS FROM COMMAND LINE
;
; ENTRY: DS:BX POINTS TO COMMAND LINE
; ES:SI POINTS TO SPACE FOR ARGUMENT POINTERS
; ES:DI POINTS TO BUFFER FOR ARGUMENTS
; CX = MAX. # OF ARGUMENTS
;
; EXIT: CX = ACTUAL # OF ARGUMENTS
; 'C'=1 IF TOO MANY ARGS
;
GETARGS PROC NEAR
MOV DX,0 ;DX COUNTS # OF ARGUMENTS
TOP:
CALL SKIPSP
JB ENDLINE ;IF END OF LINE
SAVEARG:
INC DX ;BUMP ARGUMENT COUNT
CMP DX,CX
JG TOOMANY ;IF TOO MANY ARGS
MOV AX,DI
MOV WORD PTR ES:[SI],AX ;SAVE POINTER TO ARG
ADD SI,2 ;ADVANCE TO NEXT TABLE ENTRY
CNTARGS:
MOV AL,BYTE PTR DS:[BX] ;GET CHAR. FROM COMMAND LINE
CMP AL,0
JE ENDLINE ;IF END OF LINE
COMPLIST <SPACE,TAB>,NEXTARG ;SEE IF SPACE OR TAB
MOV BYTE PTR ES:[DI],AL ;NOT DELIM, STORE ARG. TEXT
INC DI
INC BX
JMP CNTARGS ;LOOP TILL DELIMITER FOUND
NEXTARG:
MOV BYTE PTR ES:[DI],0 ;0-TERMINATE ARG
INC DI
JMP TOP ;BACK TO TOP OF LOOP
ENDLINE:
MOV BYTE PTR ES:[DI],0 ;END ARG. W. 0
MOV CX,DX ;MOVE ARG COUNT TO CX
CLC ;CLEAR CARRY TO SIGNAL NO ERROR
RET
TOOMANY:
MOV CX,DX ;MOVE ARG COUNT TO CX
STC ;TOO MANY ARGUMENTS, SET CARRY
RET
GETARGS ENDP
END